package main

import (
	"fmt"
	"sort"
)

/*
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。

注意：最终，合并后数组不应由函数返回，而是存储在数组 nums1 中。为了应对这种情况，nums1 的初始长度为 m + n，其中前 m 个元素表示应合并的元素，后 n 个元素为 0 ，应忽略。nums2 的长度为 n 。


append函数向slice尾部追加数据，返回一个新的slice对象
append函数会智能的进行底层数组的扩容，一旦超过了底层数组的容量，就会以2倍容量重新分配底层数组，并且拷贝原来的数据

copy只是用在原数组中不能改变长度。
*/

// func merge(nums1 []int, m int, nums2 []int, n int) {

// 	nums := nums1
// 	print(nums)
// 	// 合并两个数组
// 	*nums = append(*nums, nums2...)
// 	// 给数组排序
// 	sort.Ints(nums1)
// 	// 清楚数组中的数字0
// 	for i := 0; i < len(*nums); i++ {
// 		if (*nums)[i] != 0 {
// 			nums1 = (*nums)[i:]
// 			break
// 		}
// 	}
// 	// fmt.Printf("%s", nums1)
// }

func merge(nums1 []int, m int, nums2 []int, n int) {
	copy(nums1[m:], nums2)
	sort.Ints(nums1)
}

func main() {
	nums1 := []int{1, 2, 3, 0, 0, 0}
	nums2 := []int{2, 5, 6}
	m := 3
	n := 3

	print(&nums1)
	print("\n")
	merge(nums1, m, nums2, n)
	fmt.Println(nums1)

}
